package com.doctcloud.common.core.utils;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * 字符集转换工具类
 * 提供 UTF-8 和 GBK 之间的转换方法
 */
public final class CharsetUtils {

    // 定义常量字符集，避免重复创建
    private static final Charset UTF_8 = StandardCharsets.UTF_8;
    private static final Charset GBK = Charset.forName("GBK");

    /**
     * 私有构造函数，防止该工具类被实例化
     */
    private CharsetUtils() {
        throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
    }

    /**
     * 将 UTF-8 编码的字符串转换为 GBK 编码的字符串
     *
     * @param utf8Str UTF-8 编码的字符串
     * @return GBK 编码的字符串，如果输入为 null 则返回 null
     */
    public static String utf8ToGbk(String utf8Str) {
        if (utf8Str == null) {
            return null;
        }
        // 1. 将 UTF-8 字符串按其编码转为字节数组
        byte[] utf8Bytes = utf8Str.getBytes(UTF_8);
        // 2. 使用 GBK 编码将字节数组转为字符串
        return new String(utf8Bytes, GBK);
    }

    /**
     * 将 GBK 编码的字符串转换为 UTF-8 编码的字符串
     *
     * @param gbkStr GBK 编码的字符串
     * @return UTF-8 编码的字符串，如果输入为 null 则返回 null
     */
    public static String gbkToUtf8(String gbkStr) {
        if (gbkStr == null) {
            return null;
        }
        // 1. 将 GBK 字符串按其编码转为字节数组
        byte[] gbkBytes = gbkStr.getBytes(GBK);
        // 2. 使用 UTF-8 编码将字节数组转为字符串
        return new String(gbkBytes, UTF_8);
    }
}